package ProyectoX;
import java.util.Random;

import javax.swing.*;

/**
 * Clase Bomba extiende Dibujable
 * */
public class Bomba extends Dibujable{
	protected Nivel MiNivel;
	
	/**
	 * Constructor Bomba
	 * Inicializa atributos
	 * Setea la imagen
	 * */
	public Bomba(Nivel n){
		MiNivel = n;
		setIcon(new ImageIcon(getClass().getClassLoader().getResource("Imagenes/Bomba.png")));
	}

	
	/**
	 * Verifica si la nave final esta en pantalla y si el nivel tiene bombas
	 * De ser verdadero, mata todas las naves enemigas 
	 * que se encuentren en pantalla.
	 * Quita la bomba del nivel
	 * y setea el puntaje de nave jugador.
	 */
	public void serLanzada(){
		int puntos = 0;
		if(MiNivel.cantBombas() > 0 && !MiNivel.obtenerNaveFinal().estaEnPantalla()){
			for( NaveEnemiga nave: MiNivel.obtenerNavesEnemigas()){
				if(nave.estaEnPantalla()){
					puntos += nave.Morir();
				}			
			}
			MiNivel.QuitarBomba();
			MiNivel.obtenerJuego().jLabelBombas.setText(""+ MiNivel.cantBombas());

			MiNivel.obtenerNaveJugador().setPuntaje(puntos);
			MiNivel.juego.jLabelPuntos.setText(" "+ MiNivel.obtenerNaveJugador().obtenerPuntaje());
		}
	}

	/**
	 * Si la bomba esta en pantalla,
	 *  la mueve segun el i que pasa como parametro.
	 * */
	public void Mover(int i) {
		
		if (this.estaEnPantalla()){
			
			switch (i) {
			case 0:
				this.setLocation(this.getX() - 2,this.getY() );
				break;
			case 1:
				this.setLocation(this.getX() ,this.getY() -2);
				break;
			case 2:
				this.setLocation(this.getX() + 2,this.getY() );
				break;
			case 3:
				this.setLocation(this.getX() ,this.getY() + 2);
				break;
				
			}
			
			this.setLocation(this.getX() - 3,this.getY() );
		}
		else
			this.setLocation(this.getX() - 5 , this.getY() );
		
	}

	/**
	 * Mueve la bomba 
	 * */
	public void Mover() {
		Random r = new Random();
		int p = r.nextInt(4);
		Mover(p);
	}

	/**
	 * Retorna verdadero si la bomba esta en pantalla
	 * Falso en caso contrario. 
	 */
	public boolean estaEnPantalla(){
		boolean esta = false;
		if ((this.getX() < MiNivel.obtenerAnchoNivel()) && (this.getX()> 2)){
			if (this.getY() < MiNivel.obtenerAltoNivel() && this.getY()> 2)
				esta = this.isVisible();
		}
		return esta;
	}
	
	/**
	 * Verifica si la bomba colisiono con la nave jugador
	 * De ser asi la agrega al nivel y setea si visibilidad en falso.
	 * */
	protected void Colisiones(){

		if(this.estaEnPantalla()){

			if(this.alcanzoObjeto(MiNivel.obtenerNaveJugador())){
				MiNivel.AgregarBomba();
				this.setVisible(false);
				MiNivel.obtenerJuego().jLabelBombas.setText(""+ MiNivel.cantBombas());
			}	
			
	}
}

	
}
